    // This is the CS101 project of labbatch 46                                         
// this is the startup GUI



#include <iostream>
#include "rect.h"
#include <cassert>
#include <cstring>
# include "bitmap.h"
#include<ctime>
#include<cmath>


SimpleWindow w1("POCKET TANKS",25.5,16);
SimpleWindow w2("POCKET TANKS",25.5,16);
SimpleWindow w3("POCKET TANKS",25.5,16);
SimpleWindow w4("POCKET TANKS",25.5,16);
SimpleWindow w5("POCKET TANKS",25.5,16);
SimpleWindow w6("POCKET TANKS",22.5,16);
SimpleWindow w7("POCKET TANKS",25.5,16);



BitMap pic1(w1),pic2(w2),pic3(w2),pic4(w2),pic5(w3),pic6(w3),pic7(w3),pic8(w3),pic9(w3),pic10(w3),pic11(w3),pic12(w3),pic13(w3),pic14(w4),pic15(w4),pic16(w4),pic17(w4),pic18(w4),pic19(w4),pic20(w5),pic21(w5),pic22(w5),pic23(w5),pic24(w5),pic25(w5),pic26(w5),pic27(w5),pic28(w5),pic29(w5),pic30(w5),pic31(w5),pic32(w5),pic33(w6),pic34(w6),pic35(w6),pic36(w6),pic37(w6),pic38(w6),pic39(w6),pic41(w6),pic42(w6),pic43(w6),pic44(w6),pic45(w6),pic46(w6),pic47(w6),pic48(w6),pic49(w6),pic50(w6);

                 BitMap pic1L(w6);
	BitMap pic2L(w6);
	BitMap pic3L(w6);
	BitMap pic4L(w6);
	BitMap pic1R(w6);
	BitMap pic2R(w6);
	BitMap pic3R(w6);
	BitMap pic4R(w6);


 int pw=0;
 int chanceno=1;
 
 int safe=0;



 int t=0,click1=0,click2=0,click3=0,click4=0,click5=0,click6=0,click7=0,click8=0,click9=0,click10=0;
 int   l=0,clk10=10,clk20=20,clk30=30,clk40=40,clk50=50,clk60=60,clk70=70,clk80=80,clk90=90,clk100=100;
 int player1[5],comp[5];
int m=0,a1=0,b1=0,c1=0,d1=0,e1=0,f1=0,g1=0,h1=0,j101=0,k1=0;
 int a,b,c,d,e,f,g,h,j,k;int L1;
int R1;float slopel,sloper;float terrain[22500];
float power1,angle1;
const color can=(color)45;
string power,angle;
//terrain usage
double increase(double y){
y=sqrt(y)*10;
return y;
}
double decrease(double y){
y=y*y/100;
return y;
}
// output a string using rendertext by converting an int type to //srting VIA string stream courtesy:cplusplus.com
string convertInt(int number)
{
    if (number == 0)
        return "0";
    string temp="";
    string returnvalue="";
    while (number>0)
    {
        temp+=number%10+48;
        number/=10;
    }
    for (int i=0;i<temp.length();i++)
        returnvalue+=temp[temp.length()-i-1];
    return returnvalue;
}

//following are the functions for nozzle
// for second x coordinate
float funcx(float xcur,float angle){
		float xfinal;
		xfinal=xcur+cos(angle)/2;
		return xfinal;
		}
// for second ycoordinate
float funcy(float ycur,float angle){
		float yfinal;
		yfinal=ycur-sin(angle)/2;
		return yfinal;
		}
// function for nozzle
void nozzle(float baa1,float baa2,float baa3){
	
		
		float xcur=baa1,ycur=baa2,xfinal=0,yfinal=0,deg=0,xprev=0,yprev=0,angle=baa3;
	
				
		
	
		w6.RenderLine(Position(xprev,yprev), Position(xfinal,yfinal),
                        White, 0.1);
	xprev=xcur;yprev=ycur;
	angle=(3.141593)*(deg/180);
		
	xfinal=funcx(xcur,angle);
	yfinal=funcy(ycur,angle);

	w6.RenderLine(Position(xcur,ycur), Position(xfinal,yfinal),
                        Black, 0.1);

         

}


//this is function for gameplay
int f11(const Position &p){

          
   
    if(pic35.IsInside(p)&&pw!=0){

        if(pw==1&&safe!=0){
        safe=0;
        w6.RenderText(Position(14,15),Position(17,15.7),"choose a weapon",Black,Red);
        }
        if(pw==2&&safe!=0){
        w6.RenderText(Position(14,15),Position(17,15.7),"choose a weapon",Black,Red);
        safe=0;
        }
        if(pw==3&&safe!=0){
        safe=0;
        w6.RenderText(Position(14,15),Position(17,15.7),"choose a weapon",Black,Red);
        }
        if(pw==4&&safe!=0){
        safe=0;
        w6.RenderText(Position(14,15),Position(17,15.7),"choose a weapon",Black,Red);
        }
        if(pw==5&&safe!=0){
        safe=0;
        w6.RenderText(Position(14,15),Position(17,15.7),"choose a weapon",Black,Red);
        }
        if(pw==6&&safe!=0){
        safe=0;
        w6.RenderText(Position(14,15),Position(17,15.7),"choose a weapon",Black,Red);
        }
        if(pw==7&&safe!=0){
        safe=0;
        w6.RenderText(Position(14,15),Position(17,15.7),"choose a weapon",Black,Red);
        }
        if(pw==8&&safe!=0){
        safe=0;
        w6.RenderText(Position(14,15),Position(17,15.7),"choose a weapon",Black,Red);
        }
        if(pw==9&&safe!=0){
        safe=0;
        w6.RenderText(Position(14,15),Position(17,15.7),"choose a weapon",Black,Red);
        }
        if(pw=10&&safe!=0){
        safe=0;
        w6.RenderText(Position(14,15),Position(17,15.7),"choose a weapon",Black,Red);
        }
}
    if(pic36.IsInside(p)&&power1>0){
        power1--;
power=convertInt(power1);angle=convertInt(angle1);

w6.RenderText(Position(4.6,13.6),Position(5.95,14.2),power,Black,White);


w6.RenderText(Position(4.6,15.1),Position(5.95,15.7),angle,Black,White);

    }
    if(pic37.IsInside(p)&&angle1>0){
        angle1--;

power=convertInt(power1);angle=convertInt(angle1);

w6.RenderText(Position(4.6,13.6),Position(5.95,14.2),power,Black,White);


w6.RenderText(Position(4.6,15.1),Position(5.95,15.7),angle,Black,White);
    }
    if(pic38.IsInside(p)&&power1<1000){
        power1++;


power=convertInt(power1);angle=convertInt(angle1);

w6.RenderText(Position(4.6,13.6),Position(5.95,14.2),power,Black,White);


w6.RenderText(Position(4.6,15.1),Position(5.95,15.7),angle,Black,White);
    }
    if(pic39.IsInside(p)&&angle1<180){
        angle1++;

power=convertInt(power1);angle=convertInt(angle1);

w6.RenderText(Position(4.6,13.6),Position(5.95,14.2),power,Black,White);


w6.RenderText(Position(4.6,15.1),Position(5.95,15.7),angle,Black,White);
    }





    if(pic41.IsInside(p)&&(chanceno%2)==a){
        pw=1;a+=2;
	w6.RenderText(Position(14,15),Position(17,15.7),"                  ",Black,White);
        w6.RenderText(Position(14,15),Position(17,15.7),"x ray canon",Black,White);
        safe++;
    }

    if(pic42.IsInside(p)&&(chanceno%2)==b){
        pw=2;b+=2;
	w6.RenderText(Position(14,15),Position(17,15.7),"                  ",Black,White);
        w6.RenderText(Position(14,15),Position(17,15.7),"pineapple",Black,White);
        safe++;
    }

    if(pic43.IsInside(p)&&(chanceno%2)==c){
        pw=3;c+=2;
	w6.RenderText(Position(14,15),Position(17,15.7),"                  ",Black,White);
        w6.RenderText(Position(14,15),Position(17,15.7),"laser",Black,White);
        safe++;
    }

    if(pic44.IsInside(p)&&(chanceno%2)==d){
        pw=4;d+=2;
	w6.RenderText(Position(14,15),Position(17,15.7),"                  ",Black,White);
        w6.RenderText(Position(14,15),Position(17,15.7),"3 shot",Black,White);
        safe++;
    }

    if(pic45.IsInside(p)&&(chanceno%2)==e){
        pw=5;e+=2;
	w6.RenderText(Position(14,15),Position(17,15.7),"                  ",Black,White);
        w6.RenderText(Position(14,15),Position(17,15.7),"colour shot",Black,White);
        safe++;
    }

    if(pic46.IsInside(p)&&(chanceno%2)==f){
        pw=6;f+=2;
	w6.RenderText(Position(14,15),Position(17,15.7),"                  ",Black,White);
        w6.RenderText(Position(14,15),Position(17,15.7),"cruiser",Black,White);
        safe++;
    }

    if(pic47.IsInside(p)&&(chanceno%2)==g){
        pw=7;g+=2;
	w6.RenderText(Position(14,15),Position(17,15.7),"                  ",Black,White);
        w6.RenderText(Position(14,15),Position(17,15.7),"wall",Black,White);
        safe++;
    }

    if(pic48.IsInside(p)&&(chanceno%2)==h){
        pw=8;h+=2;
	w6.RenderText(Position(14,15),Position(17,15.7),"                  ",Black,White);
        w6.RenderText(Position(14,15),Position(17,15.7),"mudbomb",Black,White);
        safe++;
    }

    if(pic49.IsInside(p)&&(chanceno%2)==j){
        pw=9;j+=2;
	w6.RenderText(Position(14,15),Position(17,15.7),"                  ",Black,White);

        w6.RenderText(Position(14,15),Position(17,15.7),"zapper",Black,White);
        safe++;
    }

    if(pic50.IsInside(p)&&(chanceno%2)==k){
        pw=10;k+=2;
	w6.RenderText(Position(14,15),Position(17,15.7),"                  ",Black,White);
        w6.RenderText(Position(14,15),Position(17,15.7),"crater maker",Black,White);
        safe++;
    }
  
  
   nozzle(2,4,angle1);
  
    nozzle(21,5,angle1);
  

}


// terrain generation for one player mode
int f10(const Position &p){
             
                   w6.Open();

                                            srand(time(0));
		double x=0;double y=0;double lan=rand()%10+1;int ian=0;int jan=rand()%2;float yarray[22500];double nan,ran;int kan=0;
		while(x+0.01<22.5)
		{
		if(lan<=3||jan==0){
			kan=rand()%3+1;
			while(1){
			y=rand()%100+1;
			y=decrease(y);
y=y/1000;
lan=lan-(y-0.05)/kan;
yarray[ian]=l;
ian++;
w6.RenderRectangle(Position(x,lan),Position(x+0.01,16),can,false);
x+=0.01;
if(lan>=11)
break;
}
}
if(lan>=11||jan==1){
kan=rand()%3+1;
while(1){
y=rand()%100+1;
y=increase(y);
y=y/1000;
lan=lan-(y-0.05)/kan;
yarray[ian]=lan;
ian++;
w6.RenderRectangle(Position(x,lan),Position(x+0.01,16),can,false);
x+=0.01;
if(lan<=3)
break;
}
}
}

        

       pic33.Load("score.XPM");
       pic33.SetPosition(Position(0,-0.8));
       pic33.Draw();

       pic34.Load("toolbar.XPM");
       pic34.SetPosition(Position(0,13));
       pic34.Draw();

       pic35.Load("kaboom.XPM");
       pic35.SetPosition(Position(20,13.5));
       pic35.Draw();

       pic36.Load("leftp.XPM");
       pic36.SetPosition(Position(3.8,13.5));
       pic36.Draw();

       pic37.Load("lefta.XPM");
       pic37.SetPosition(Position(3.8,15));
       pic37.Draw();

       pic38.Load("rightp.XPM");
       pic38.SetPosition(Position(6,13.5));
       pic38.Draw();

       pic39.Load("righta.XPM");
       pic39.SetPosition(Position(6,15));
       pic39.Draw();
      
        angle1=30;power1=60;power=convertInt(power1);angle=convertInt(angle1);
      w6.RenderText(Position(4.6,13.6),Position(5.95,14.2),power,Black,White);
  
        angle1=30;power1=60;power=convertInt(power1);angle=convertInt(angle1);
      w6.RenderText(Position(4.6,13.6),Position(5.95,14.2),power,Black,White);
       
      w6.RenderText(Position(4.6,15.1),Position(5.95,15.7),angle,Black,White);

     

    pic41.Load("4a.XPM");
    pic41.SetPosition(Position(9,14.1));
    pic41.Draw();

    pic42.Load("4b.XPM");
    pic42.SetPosition(Position(10,14.1));
    pic42.Draw();

    pic43.Load("4c.XPM");
    pic43.SetPosition(Position(11,14.1));
    pic43.Draw();

    pic44.Load("4d.XPM");
    pic44.SetPosition(Position(12,14.1));
    pic44.Draw();

    pic45.Load("4e.XPM");
    pic45.SetPosition(Position(13,14.1));
    pic45.Draw();

    pic46.Load("4f.XPM");
    pic46.SetPosition(Position(14,14.1));
    pic46.Draw();

    pic47.Load("4g.XPM");
    pic47.SetPosition(Position(15,14.1));
    pic47.Draw();

    pic48.Load("4h.XPM");
    pic48.SetPosition(Position(16,14.1));
    pic48.Draw();

    pic49.Load("4i.XPM");
    pic49.SetPosition(Position(17,14.1));
    pic49.Draw();

    pic50.Load("4j.XPM");
    pic50.SetPosition(Position(18,14.1));
    pic50.Draw();

                    
                    }
// terrain generation and loading of toolbar for two player mode
int f9(const Position &p){
                   w1.Close();
 		   w2.Close(); 
                   w3.Close();
 		   w4.Close();
 	           w5.Close();
 

                   w6.Open();

                                            srand(time(0));
double x=0;double y=0;double lan=rand()%10+1;int ian=0;int jan=rand()%2;float nan,ran;int kan=0;
while(x+0.01<22.5)
{
if(lan<=3||jan==0){
kan=rand()%3+1;
while(x+0.01<22.5){
y=rand()%100+1;
y=decrease(y);
y=y/1000;
lan=lan-(y-0.05)/kan;
terrain[ian]=l;
if(x==2)
nan=lan;
if(x==21)
ran=lan;
x+=0.01;
w6.RenderRectangle(Position(x,lan),Position(x+0.01,22.5),can,false);
ian=x*100;
if(lan>=11)
break;
}if(x==2)
nan=lan;
if(x==21)
ran=lan;
}
if(lan>=11||jan==1){
kan=rand()%3+1;
while(x+0.01<22.5){
y=rand()%100+1;
y=increase(y);
y=y/1000;
lan=lan-(y-0.05)/kan;
if(x==2)
nan=lan;
if(x==21)
ran=lan;
terrain[ian]=lan;
x+=0.01;
w6.RenderRectangle(Position(x,lan),Position(x+0.01,22.5),can,false);
ian=x*100;
if(lan<=3)
break;
}
}
}

        
//loading of images for toolbar
       pic33.Load("score.XPM");
       pic33.SetPosition(Position(0,-0.8));
       pic33.Draw();

       pic34.Load("toolbar.XPM");
       pic34.SetPosition(Position(0,13));
       pic34.Draw();

       pic35.Load("kaboom.XPM");
       pic35.SetPosition(Position(20,13.5));
       pic35.Draw();

       pic36.Load("leftp.XPM");
       pic36.SetPosition(Position(3.8,13.5));
       pic36.Draw();

       pic37.Load("lefta.XPM");
       pic37.SetPosition(Position(3.8,15));
       pic37.Draw();

       pic38.Load("rightp.XPM");
       pic38.SetPosition(Position(6,13.5));
       pic38.Draw();

       pic39.Load("righta.XPM");
       pic39.SetPosition(Position(6,15));
       pic39.Draw();
      
        angle1=30;power1=60;power=convertInt(power1);angle=convertInt(angle1);
      w6.RenderText(Position(4.6,13.6),Position(5.95,14.2),power,Black,White);
       
      w6.RenderText(Position(4.6,15.1),Position(5.95,15.7),angle,Black,White);

     
// loading of weapon icons
    pic41.Load("4a.XPM");
    pic41.SetPosition(Position(9,14.1));
    pic41.Draw();

    pic42.Load("4b.XPM");
    pic42.SetPosition(Position(10,14.1));
    pic42.Draw();

    pic43.Load("4c.XPM");
    pic43.SetPosition(Position(11,14.1));
    pic43.Draw();

    pic44.Load("4d.XPM");
    pic44.SetPosition(Position(12,14.1));
    pic44.Draw();

    pic45.Load("4e.XPM");
    pic45.SetPosition(Position(13,14.1));
    pic45.Draw();

    pic46.Load("4f.XPM");
    pic46.SetPosition(Position(14,14.1));
    pic46.Draw();

    pic47.Load("4g.XPM");
    pic47.SetPosition(Position(15,14.1));
    pic47.Draw();

    pic48.Load("4h.XPM");
    pic48.SetPosition(Position(16,14.1));
    pic48.Draw();

    pic49.Load("4i.XPM");
    pic49.SetPosition(Position(17,14.1));
    pic49.Draw();

    pic50.Load("4j.XPM");
    pic50.SetPosition(Position(18,14.1));
    pic50.Draw();

      
                        w6.SetMouseClickCallback(f11);
                

}



//weapon selection for one player mode
// the computer selects the most powerful weapon of the //remaining always
int f8(const Position &p){

                 int min=150;
  
           if(pic21.IsInside(p)&&clk10==10){ 
          
                   pic21.Erase();
                   pic31.Load("blank.XPM");
                   pic31.SetPosition(Position(6.5,5));
                   pic31.Draw();

                       int y1;

                       y1=5+2*l;

                         pic21.Load("open4a.XPM");
          			     pic21.SetPosition(Position(2.5,y1));
						//Moving the weapon to the right for 1st player and assigning its position.
               			 pic21.Draw(); 
                         clk10++;
                         l++;
                        player1[l]=10;        
                          }

                 else if(pic22.IsInside(p)&&clk20==20){

                
                   pic22.Erase();
                   pic31.Load("blank.XPM");
                   pic31.SetPosition(Position(6.5,7));
                   pic31.Draw();

                       int y2;

                       y2=5+2*l;

                              pic22.Load("open4b.XPM");
              			     pic22.SetPosition(Position(2.5,y2));
               			pic22.Draw();
				clk20++;
                                 l++;
                               player1[l]=20;
                           }

          else if(pic23.IsInside(p)&&clk30==30){

                  
                      pic23.Erase();
                      pic31.Load("blank.XPM");
                      pic31.SetPosition(Position(6.5,9));
                      pic31.Draw();

                          int y3;

                          y3=5+2*l;

                                pic23.Load("open4c.XPM");
              			       pic23.SetPosition(Position(2.5,y3));
               			  pic23.Draw();
                              clk30++;
                                l++;
				player1[l]=30;
                                }
           
          else if(pic24.IsInside(p)&&clk40==40){

             
                      pic24.Erase();
                      pic31.Load("blank.XPM");
                      pic31.SetPosition(Position(6.5,11));
                      pic31.Draw();

                          int y4;

                          y4=5+2*l;

                                pic24.Load("open4d.XPM");
              			       pic24.SetPosition(Position(2.5,y4));
               			  pic24.Draw();
               			   clk40++;
                           l++;
				player1[l]=40;
                          }
                 
         else if (pic25.IsInside(p)&&clk50==50){

                
                   	  pic25.Erase();
                      pic31.Load("blank.XPM");
                      pic31.SetPosition(Position(5.2,13));
                      pic31.Draw();

                         int y5;

                         y5=5+2*l;

                                pic25.Load("open4e.XPM");
              			       pic25.SetPosition(Position(2.5,y5));
               			  pic25.Draw();
                                clk50++;
                          l++;
				player1[l]=50;
                          }

           else if(pic26.IsInside(p)&&clk60==60){

                
                      pic26.Erase();
                      pic31.Load("blank.XPM");
                      pic31.SetPosition(Position(13,5));
                      pic31.Draw();

                         int y6;

                         y6=5+2*l;

                                pic26.Load("open4f.XPM");
              			       pic26.SetPosition(Position(2.5,y6));
               			  pic26.Draw();
                            clk60++;
                          l++;
				player1[l]=60;
                          }

            else if(pic27.IsInside(p)&&clk70==70){

                 
                       pic27.Erase();
                       pic31.Load("blank.XPM");
                       pic31.SetPosition(Position(13,7));
                       pic31.Draw();

                         int y7;

                         y7=5+2*l;

                                pic27.Load("open4g.XPM");
              			       pic27.SetPosition(Position(2.5,y7));
               			  pic27.Draw();
                            clk70++;
                          l++;
				player1[l]=70;
                          }
                         
 			else if(pic28.IsInside(p)&&clk80==80){

                     
                       pic28.Erase();
                       pic31.Load("blank.XPM");
                       pic31.SetPosition(Position(13,9));
                       pic31.Draw();

                         int y8;

                         y8=5+2*l;

                                pic28.Load("open4h.XPM");
              			       pic28.SetPosition(Position(2.5,y8));
               			  pic28.Draw();
                           clk80++;
                           l++;
				player1[l]=80;
                          }
                          
			else if(pic29.IsInside(p)&&clk90==90){

                                 
                       pic29.Erase();
                       pic31.Load("blank.XPM");
                       pic31.SetPosition(Position(13,11));
                       pic31.Draw();

                         int y9;

                         y9=5+2*l;

                                pic29.Load("open4i.XPM");
              			       pic29.SetPosition(Position(2.5,y9));
               			  pic29.Draw();
                           clk90++;
                          l++;
				player1[l]=90;
                          }
                          
 			else if(pic30.IsInside(p)&&clk100==100){

                                 
                       pic30.Erase();
                       pic31.Load("blank.XPM");
                       pic31.SetPosition(Position(13.5,13));
                       pic31.Draw();

                         int y10;

                         y10=5+2*l;

                                pic30.Load("open4j.XPM");
              			       pic30.SetPosition(Position(2.5,y10));
               			  pic30.Draw();
                             clk100++;
                           l++;
				player1[l]=100;
                          }
//the below is to make sure that the computer selects the most //powerful one of the remaining
		int sum;
		sum=(((clk10+clk20+clk30+clk40+clk50+clk60+clk70+clk80+clk90+clk100)%10) + 1);

		if(2*l==sum){
                     if(min>10&&clk10%10==0){

                            min=10;

                            }
                          
                     else if(min>20&&clk20%10==0){

                            min=20;

                            }

                     else if(min>30&&clk30%10==0){

                            min=30;

                            }

                     else if(min>40&&clk40%10==0){

                            min=40;

                            }

                     else if(min>50&&clk50%10==0){

                            min=50;

                            }

                     else if(min>60&&clk60%10==0){

                            min=60;

                            }

                     else if(min>70&&clk70%10==0){

                            min=70;

                            }

                     else if(min>80&&clk80%10==0){

                            min=80;

                            }

                     else if(min>90&&clk90%10==0){

                            min=90;

                            }

                     else if(min>100&&clk100%10==0){

                            min=100;

                            }
                   
                          

                   


                  if(min==10){

                         pic21.Erase();
                   pic31.Load("blank.XPM");
                   pic31.SetPosition(Position(6.5,5));
                   pic31.Draw();
                   
                          int y1;
                          y1=5+2*l;
                         pic21.Load("open4a.XPM");
          			     pic21.SetPosition(Position(21,y1-2));
						//Moving the weapon to the left for CPU and assigning its position.
               			 pic21.Draw(); 
               			 clk10++;
               			 comp[l]=10;

               			 }

                  else if(min==20){ 

                        pic22.Erase();
                   pic31.Load("blank.XPM");
                   pic31.SetPosition(Position(6.5,7));
                   pic31.Draw();

                       int y2;
                      y2=5+2*l;
                         pic22.Load("open4b.XPM");
              			pic22.SetPosition(Position(21,y2-2));
               			pic22.Draw();
               			clk20++;
               			comp[l]=20;

               			 }


                  else if(min==30){

                             pic23.Erase();
                      pic31.Load("blank.XPM");
                      pic31.SetPosition(Position(6.5,9));
                      pic31.Draw();

                 		  int y3;
                           y3=5+2*l;
                            pic23.Load("open4c.XPM");
              			   pic23.SetPosition(Position(21,y3-2));
               			  pic23.Draw();
               			  clk30++;
               			 comp[l]=30;

               			 }


                  else if(min==40){

                            pic24.Erase();
                      pic31.Load("blank.XPM");
                      pic31.SetPosition(Position(6.5,11));
                      pic31.Draw();

                  			 int y4;
                           y4=5+2*l;
                             pic24.Load("open4d.XPM");
          			        pic24.SetPosition(Position(21,y4-2));
               			   pic24.Draw();
               			   clk40++;
               			 comp[l]=40;

               			 }


                  else if(min==50){

                               	  pic25.Erase();
                      pic31.Load("blank.XPM");
                      pic31.SetPosition(Position(5.2,13));
                      pic31.Draw();

                  			int y5;
                           y5=5+2*l;
                             pic25.Load("open4e.XPM");
          			        pic25.SetPosition(Position(21,y5-2));
               			   pic25.Draw();
               			   clk50++;
               			 comp[l]=50;

               			 }


                  else if(min==60){

                                   pic26.Erase();
                      pic31.Load("blank.XPM");
                      pic31.SetPosition(Position(13,5));
                      pic31.Draw();

                  		 int y6;
                          y6=5+2*l;
                            pic26.Load("open4f.XPM");
          			       pic26.SetPosition(Position(21,y6-2));
               			  pic26.Draw();
               			  clk60++;
               			comp[l]=60;

               			 }


                  else if(min==70){

                                pic27.Erase();
                       pic31.Load("blank.XPM");
                       pic31.SetPosition(Position(13,7));
                       pic31.Draw();

                  		 int y7;
                          y7=5+2*l;
                             pic27.Load("open4g.XPM");
          			        pic27.SetPosition(Position(21,y7-2));
               			   pic27.Draw();
               			    clk70++;
               			 comp[l]=70;

               			 }

                  else if(min==80){

                                    pic28.Erase();
                       pic31.Load("blank.XPM");
                       pic31.SetPosition(Position(13,9));
                       pic31.Draw();


                  		int y8;
                          y8=5+2*l;
                            pic28.Load("open4h.XPM");
          			       pic28.SetPosition(Position(21,y8-2));
               			  pic28.Draw();
               			  clk80++;
               			 comp[l]=80;

               			 }


                  else if(min==90){

                                  pic29.Erase();
                       pic31.Load("blank.XPM");
                       pic31.SetPosition(Position(13,11));
                       pic31.Draw();
           
                  		int y9;
                          y9=5+2*l;
                            pic29.Load("open4i.XPM");
          			       pic29.SetPosition(Position(21,y9-2));
               			  pic29.Draw();
               			  clk90++;
               			comp[l]=90;
               			 }


                  else if(min==100){

                                pic30.Erase();
                       pic31.Load("blank.XPM");
                       pic31.SetPosition(Position(13.5,13));
                       pic31.Draw();


                          int y10;
                          y10=5+2*l;
                            pic30.Load("open4j.XPM");
          			       pic30.SetPosition(Position(21,y10-2));
               			  pic30.Draw();
               			  clk100++;
               			 comp[l]=100;

               			 }
                                }
             
                else if(l==5&&pic32.IsInside(p)){ 

                           w5.SetMouseClickCallback(f10);
                   
                              }

               
              }                

//weapon selection for two player mode
 int f7(const Position &p){

  
      /* Here first we are intialising no. of clicks(i) to zero and no. of times of selection of each weapon to zero.After the selection of the weapon its click value is incremented by one so that it is not affected(since it fails to satisfy the initial if condition) if user clicks it again.*/
    
  /*to store the weapons selected by each player.*/
   
          
           if(pic21.IsInside(p)&&click1==0){ 
          
                   pic21.Erase();
                   pic31.Load("blank.XPM");
                   pic31.SetPosition(Position(6.5,5));
                   pic31.Draw();

                 if (t%2==0){

                       int y1;

                       y1=5+t;

                         pic21.Load("open4a.XPM");
          			     pic21.SetPosition(Position(2.5,y1));
						//Moving the weapon to the right for odd numbered selection and assigning its position.
               			 pic21.Draw(); 

                             a=1;/*the first number indicates the player who selected it and the second number represnts the weapon */
                       cout<<a<<endl;
                     
                         }     

                    else if(t%2==1){

                        int y1;

                        y1=5+t;

                         pic21.Load("open4a.XPM");
          			     pic21.SetPosition(Position(21,y1-1));
						//Moving the weapon to the left for even numbered selection and assigning its position.
               			 pic21.Draw();

                              a=2;
                         cout<<a<<endl;              

                         }

                      click1++;
                     t++;
                }      
                                 
           else if(pic22.IsInside(p)&&click2==0){

                
                   pic22.Erase();
                   pic31.Load("blank.XPM");
                   pic31.SetPosition(Position(6.5,7));
                   pic31.Draw();

             
                  if (t%2==0){

                       int y2;

                       y2=5+t;

                              pic22.Load("open4b.XPM");
              			     pic22.SetPosition(Position(2.5,y2));
               			pic22.Draw();

                             b=1;
                       cout<<b<<endl;
                             }     

                    else if(t%2==1){

                        int y2;

                        y2=5+t;

                              pic22.Load("open4b.XPM");
              			     pic22.SetPosition(Position(21,y2-1));
               			pic22.Draw();

                            b=2;
                       cout<<b<<endl;
                             

                         }

                     click2++;
                     t++; 

                 } 
          

           else if(pic23.IsInside(p)&&click3==0){

                  
                      pic23.Erase();
                      pic31.Load("blank.XPM");
                      pic31.SetPosition(Position(6.5,9));
                      pic31.Draw();

                       
                    if (t%2==0){

                          int y3;

                          y3=5+t;

                                pic23.Load("open4c.XPM");
              			       pic23.SetPosition(Position(2.5,y3));
               			  pic23.Draw();

                               c=1;
                       cout<<c<<endl;
                            }     

                     else if(t%2==1){

                           int y3;

                           y3=5+t;

                                pic23.Load("open4c.XPM");
              			       pic23.SetPosition(Position(21,y3-1));
               			  pic23.Draw();

                            c=2;
                       cout<<c<<endl;

                             }     
                       
                        click3++;
                        t++;
 
                 }
           
           else if(pic24.IsInside(p)&&click4==0){

             
                      pic24.Erase();
                      pic31.Load("blank.XPM");
                      pic31.SetPosition(Position(6.5,11));
                      pic31.Draw();

                      
                    if (t%2==0){

                          int y4;

                          y4=5+t;

                                pic24.Load("open4d.XPM");
              			       pic24.SetPosition(Position(2.5,y4));
               			  pic24.Draw();

                          d=1;
                       cout<<d<<endl;

                                

                         }     

                    else if(t%2==1){

                           int y4;

                           y4=5+t;

                                 pic24.Load("open4d.XPM");
              			        pic24.SetPosition(Position(21,y4-1));
               			   pic24.Draw();

                               d=2;
                       cout<<d<<endl;
                                 

                         } 

                     click4++;
                      t++;   

                   }
                   
           else if (pic25.IsInside(p)&&click5==0){

                
                   	  pic25.Erase();
                      pic31.Load("blank.XPM");
                      pic31.SetPosition(Position(5,13));
                      pic31.Draw();

                       
                   if (t%2==0){

                         int y5;

                         y5=5+t;

                                pic25.Load("open4e.XPM");
              			       pic25.SetPosition(Position(2.5,y5));
               			  pic25.Draw();

                          e=1;
                       cout<<e<<endl;
                               

                         }     

                     else if(t%2==1){

                           int y5;

                           y5=5+t;

                                 pic25.Load("open4e.XPM");
              			        pic25.SetPosition(Position(21,y5-1));
               			   pic25.Draw();

                            e=2;
                       cout<<e<<endl;
                                

                         }  

                     click5++;
                     t++;   

                    }
                    
           else if(pic26.IsInside(p)&&click6==0){

               
                      pic26.Erase();
                      pic31.Load("blank.XPM");
                      pic31.SetPosition(Position(13,5));
                      pic31.Draw();

                      
                   if (t%2==0){

                         int y6;

                         y6=5+t;

                                pic26.Load("open4f.XPM");
              			       pic26.SetPosition(Position(2.5,y6));
               			  pic26.Draw();

                                  f=1;
                       cout<<f<<endl;
                                

                         }     

                    else if(t%2==1){

                          int y6;

                          y6=5+t;

                                pic26.Load("open4f.XPM");
              			       pic26.SetPosition(Position(21,y6-1));
               			  pic26.Draw();

                             f=2;
                       cout<<f<<endl;
                                

                         } 

                      click6++;
                       t++;   

                   }
                   
           else if(pic27.IsInside(p)&&click7==0){

                 
                       pic27.Erase();
                       pic31.Load("blank.XPM");
                       pic31.SetPosition(Position(13,7));
                       pic31.Draw();

                              
                   if (t%2==0){

                         int y7;

                         y7=5+t;

                                pic27.Load("open4g.XPM");
              			       pic27.SetPosition(Position(2.5,y7));
               			  pic27.Draw();

                             g=1;
                       cout<<g<<endl;
                                
 
                         }     

                     else if(t%2==1){

                          int y7;

                          y7=5+t;

                                 pic27.Load("open4g.XPM");
              			        pic27.SetPosition(Position(21,y7-1));
               			   pic27.Draw();

                              g=2;
                       cout<<g<<endl;   

                         } 

                       click7++;
                        t++;  

                    }

           else if(pic28.IsInside(p)&&click8==0){

                     
                       pic28.Erase();
                       pic31.Load("blank.XPM");
                       pic31.SetPosition(Position(13,9));
                       pic31.Draw();

                         
                   if (t%2==0){

                         int y8;

                         y8=5+t;

                                pic28.Load("open4h.XPM");
              			       pic28.SetPosition(Position(2.5,y8));
               			  pic28.Draw();

                                h=1;
                       cout<<h<<endl;

                         }     

                     else if(t%2==1){

                          int y8;

                          y8=5+t;

                                pic28.Load("open4h.XPM");
              			       pic28.SetPosition(Position(21,y8-1));
               			  pic28.Draw();

                              h=2;
                       cout<<h<<endl;  

                         } 

                      click8++;
                      t++;    

                    }
                    
           else if(pic29.IsInside(p)&&click9==0){

                                 
                       pic29.Erase();
                       pic31.Load("blank.XPM");
                       pic31.SetPosition(Position(13,11));
                       pic31.Draw();

                             
                   if (t%2==0){

                         int y9;

                         y9=5+t;

                                pic29.Load("open4i.XPM");
              			       pic29.SetPosition(Position(2.5,y9));
               			  pic29.Draw();

                              j=1;
                       cout<<j<<endl;  

                         }     

                     else if(t%2==1){

                          int y9;

                          y9=5+t;

                                pic29.Load("open4i.XPM");
              			       pic29.SetPosition(Position(21,y9-1));
               			  pic29.Draw();

                              j=2;
                       cout<<j<<endl;
  
                         } 

                      click9++;
                     t++;
    

                    }
                    
           else if(pic30.IsInside(p)&&click10==0){

                                 
                       pic30.Erase();
                       pic31.Load("blank.XPM");
                       pic31.SetPosition(Position(15.5,13));
                       pic31.Draw();

                             
                   if (t%2==0){

                         int y10;
                        y10=5+t;

                                pic30.Load("open4j.XPM");
              			       pic30.SetPosition(Position(2.5,y10));
               			  pic30.Draw();

                             k=1;
                       cout<<k<<endl;    

                         }     

                     else if(t%2==1){

                          int y10;

                          y10=5+t;

                                pic30.Load("open4j.XPM");
              			       pic30.SetPosition(Position(21,y10-1));
               			  pic30.Draw();

                                 k=2;
                       cout<<k<<endl;

                         }  

                      click10++;
                        t++;

                    }
            
              else if (pic32.IsInside(p)&&t==10){
        
                        w5.SetMouseClickCallback(f9);

         
             }

}


       
// loading of weapon images for the weapon selection screen
 int f6(const Position &p){

      int v;

            if(pic15.IsInside(p)||pic16.IsInside(p)||pic17.IsInside(p)||pic18.IsInside(p)||pic19.IsInside(p)){
                                 
                               w5.Open();
               //User(s) will be provided with ten weapons out of which each one selects five

               pic20.Load("weapon.XPM");
               pic20.SetPosition(Position(0,0));
               pic20.Draw();

               pic21.Load("open4a.XPM");
               pic21.SetPosition(Position(6.5,5));
               pic21.Draw();

               pic22.Load("open4b.XPM");
               pic22.SetPosition(Position(6.5,7));
               pic22.Draw();

               pic23.Load("open4c.XPM");
               pic23.SetPosition(Position(6.5,9));
               pic23.Draw();

               pic24.Load("open4d.XPM");
               pic24.SetPosition(Position(6.5,11));
               pic24.Draw();

               pic25.Load("open4e.XPM");
               pic25.SetPosition(Position(6.5,13));
               pic25.Draw();

               pic26.Load("open4f.XPM");
               pic26.SetPosition(Position(16,5));
               pic26.Draw();

               pic27.Load("open4g.XPM");
               pic27.SetPosition(Position(16,7));
               pic27.Draw();

               pic28.Load("open4h.XPM");
               pic28.SetPosition(Position(16,9));
               pic28.Draw();

               pic29.Load("open4i.XPM");
               pic29.SetPosition(Position(16,11));
               pic29.Draw();

               pic30.Load("open4j.XPM");
               pic30.SetPosition(Position(16,13));
               pic30.Draw();

                 pic32.Load("cont.XPM");
            pic32.SetPosition(Position(12,14));
            pic32.Draw();


          /*to store level chosen by user in 1 player mode*/

                 if(pic15.IsInside(p)){

                          v=1;
                          cout<<v<<endl;
 
                         }

                 else if(pic16.IsInside(p)){

                          v=2;
                          cout<<v<<endl;
 
                         }

                  else if(pic17.IsInside(p)){

                          v=3;
                          cout<<v<<endl;
 
                         }

                  else if(pic18.IsInside(p)){

                          v=4;
                          cout<<v<<endl;
 
                         }

                  else if(pic19.IsInside(p)){

                          v=5;
                          cout<<v<<endl;
 
                         }

                   
                   }
                                w5.SetMouseClickCallback(f8); 

     }
                
   //loading of weapon images for weapon selection in two player //mode
 int f5(const Position &p){



            if(pic6.IsInside(p)||pic7.IsInside(p)||pic8.IsInside(p)||pic9.IsInside(p)||pic10.IsInside(p)||pic11.IsInside(p)){
                                 
                               w5.Open();
              //User(s) will be provided with ten weapons out of which each one selects five

               pic20.Load("weapon.XPM");
               pic20.SetPosition(Position(0,0));
               pic20.Draw();

               pic21.Load("open4a.XPM");
               pic21.SetPosition(Position(6.5,5));
               pic21.Draw();

               pic22.Load("open4b.XPM");
               pic22.SetPosition(Position(6.5,7));
               pic22.Draw();

               pic23.Load("open4c.XPM");
               pic23.SetPosition(Position(6.5,9));
               pic23.Draw();

               pic24.Load("open4d.XPM");
               pic24.SetPosition(Position(6.5,11));
               pic24.Draw();

               pic25.Load("open4e.XPM");
               pic25.SetPosition(Position(6.5,13));
               pic25.Draw();

               pic26.Load("open4f.XPM");
               pic26.SetPosition(Position(16,5));
               pic26.Draw();

               pic27.Load("open4g.XPM");
               pic27.SetPosition(Position(16,7));
               pic27.Draw();

               pic28.Load("open4h.XPM");
               pic28.SetPosition(Position(16,9));
               pic28.Draw();

               pic29.Load("open4i.XPM");
               pic29.SetPosition(Position(16,11));
               pic29.Draw();

               pic30.Load("open4j.XPM");
               pic30.SetPosition(Position(16,13));
               pic30.Draw();

                pic32.Load("cont.XPM");
            pic32.SetPosition(Position(12,14));
            pic32.Draw();

               

                 

                 /*to store colour chosen by second player in 2 players mode */

                         if(pic6.IsInside(p)){
                            
                                L1=1;
                              cout<<L1<<endl;
                             
                               }
                 
                 else if(pic7.IsInside(p)){
                            
                                L1=2;
                             cout<<L1<<endl;

                               }

                  else if(pic8.IsInside(p)){
                            
                                L1=3;
                             cout<<L1<<endl;

                               }

                    else if(pic11.IsInside(p)){
                            
                                L1=4;
                             cout<<L1<<endl;

                               }

                                 w5.SetMouseClickCallback(f7); 
                   }

     }

//loading of level selection for one player mode
int f4(const Position &p){

      

            if(pic6.IsInside(p)||pic7.IsInside(p)||pic8.IsInside(p)||pic9.IsInside(p)||pic10.IsInside(p)||pic11.IsInside(p)){

                 w4.Open();
                 //User will be allowed to select the level in which he wishes to play against the computer

                 pic14.Load("level.XPM");
                 pic14.SetPosition(Position(0,0));
                 pic14.Draw();

                 pic15.Load("one.XPM");
                 pic15.SetPosition(Position(2.5,8));
                 pic15.Draw();

                 pic16.Load("two.XPM");
                 pic16.SetPosition(Position(6.5,8));
                 pic16.Draw();
              
                 pic17.Load("three.XPM");
                 pic17.SetPosition(Position(10.5,8));
                 pic17.Draw();

                 pic18.Load("four.XPM");
                 pic18.SetPosition(Position(14.5,8));
                 pic18.Draw();

                 pic19.Load("five.XPM");
                 pic19.SetPosition(Position(18.5,8));
                 pic19.Draw();

                 w4.SetMouseClickCallback(f6);

                /*to store colour chosen by first player in 1 player mode */

                    if(pic6.IsInside(p)){
                            
                                R1=1;
                              cout<<R1<<endl;
                             
                               }
                 
                 else if(pic7.IsInside(p)){

                                R1=2;
                             cout<<R1<<endl;

                               }

                  else if(pic8.IsInside(p)){
                            
                                R1=3;
                             cout<<R1<<endl;

                               }

                    else if(pic11.IsInside(p)){
                            
                                R1=4;
                             cout<<R1<<endl;

                               }

 
             }

    } 


           
                      

//selection of tank by player two in two player mode
                      
int f3(const Position &p){



         //2nd player will be allowed to select his tank 
         
               if(pic6.IsInside(p)||pic7.IsInside(p)||pic8.IsInside(p)||pic9.IsInside(p)||pic10.IsInside(p)||pic11.IsInside(p)){
                       
                          pic13.Load("player2.XPM");
                          pic13.SetPosition(Position(0,5.8));
                          pic13.Draw();

                       w3.SetMouseClickCallback(f5);
                          
                  /*to store tank chosen by first player in 2 players mode */                    

                 if(pic6.IsInside(p)){
                            
                               R1=1;
                              cout<<R1<<endl;
                             
                               }
                 
                 else if(pic7.IsInside(p)){
                            
                                R1=2;
                             cout<<R1<<endl;


                               }

                  else if(pic8.IsInside(p)){
                            
                                R1=3;
                             cout<<R1<<endl;

                               }

                    else if(pic11.IsInside(p)){
                            
                                R1=4;
                             cout<<R1<<endl;

                               }
                     
                        }

                    }
 //selection of tank by playerone 
int f2(const Position &p) {

 //two player mode
       if (pic3.IsInside(p)) {
     
                      w3.Open();
                

            pic5.Load("tank.XPM");
            pic5.SetPosition(Position(0,0));
            pic5.Draw();

            pic12.Load("player1.XPM");
            pic12.SetPosition(Position(0,6));
            pic12.Draw();

          	pic6.Load("red.XPM");
          	pic6.SetPosition(Position(3,9));
          	pic6.Draw();
     
          	pic7.Load("blue.XPM");
          	pic7.SetPosition(Position(7.5,9));
          	pic7.Draw();

          	pic8.Load("green.XPM");
          	pic8.SetPosition(Position(13.5,9.1));
          	pic8.Draw();

          	pic11.Load("cyan.XPM");
          	pic11.SetPosition(Position(19.5,9));
          	pic11.Draw();
 
                      w3.SetMouseClickCallback(f3);  

                    }
//one player mode
      else if (pic2.IsInside(p)){
      
                      w3.Open();
                  

         pic5.Load("tank.XPM");
         pic5.SetPosition(Position(0,0));
         pic5.Draw();

            pic12.Load("player1.XPM");
            pic12.SetPosition(Position(0,6));
            pic12.Draw();

          	pic6.Load("red.XPM");
          	pic6.SetPosition(Position(3,9));
          	pic6.Draw();
     
          	pic7.Load("blue.XPM");
          	pic7.SetPosition(Position(7.5,9));
          	pic7.Draw();

          	pic8.Load("green.XPM");
          	pic8.SetPosition(Position(13.5,9.1));
          	pic8.Draw();

          	pic11.Load("cyan.XPM");
          	pic11.SetPosition(Position(19.5,9));
          	pic11.Draw();
 
                   w3.SetMouseClickCallback(f4);

                  }

}
//selection of  mode
int f_1(const Position &p){
     
     w2.Open();  
     // User will be given two options to select in which mode he wants to play 
          
     pic4.Load("mode.XPM");
     pic4.SetPosition(Position(0,0));
     pic4.Draw();

     pic2.Load("1player.XPM");
     pic2.SetPosition(Position(4,6));
     pic2.Draw();

     pic3.Load("2player.XPM");
     pic3.SetPosition(Position(10,10));
     pic3.Draw();
          w2.SetMouseClickCallback(f2);

        }

int ApiMain(){
   //loading up of the startup screen
   w1.Open();
   assert(w1.GetStatus()==WindowOpen);
   pic1.Load("ka.xpm");
   
   pic1.SetPosition(Position(0,0));
   pic1.Draw();


   w1.SetMouseClickCallback(f_1);

   return 0;

}






